home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 3.iso / dist / fw_qt3.idb / usr / freeware / Qt / examples / demo / i18n / i18n.cpp.z / i18n.cpp
C/C++ Source or Header  |  2002-04-08  |  5KB  |  252 lines

  1. #include "i18n.h"
  2. #include "wrapper.h"
  3. #include "../textdrawing/textedit.h"
  4.  
  5. #include <qaction.h>
  6. #include <qvbox.h>
  7. #include <qworkspace.h>
  8. #include <qpopupmenu.h>
  9. #include <qmenubar.h>
  10. #include <qtoolbar.h>
  11. #include <qtoolbutton.h>
  12. #include <qpixmap.h>
  13. #include <qiconset.h>
  14. #include <qapplication.h>
  15. #include <qwidgetlist.h>
  16. #include <qlabel.h>
  17. #include <qtextedit.h>
  18.  
  19.  
  20. static int windowIdNumber = 5000;
  21. static bool firstShow = TRUE;
  22.  
  23.  
  24. I18nDemo::I18nDemo(QWidget *parent, const char *name)
  25.     : QMainWindow(parent, name), lastwrapper(0)
  26. {
  27.     initActions();
  28.     initMenuBar();
  29.  
  30.     QVBox *box = new QVBox(this);
  31.     box->setFrameStyle( QFrame::StyledPanel | QFrame::Sunken );
  32.     box->setMargin( 1 );
  33.     box->setLineWidth( 1 );
  34.  
  35.     workspace = new QWorkspace(box);
  36.     connect(workspace, SIGNAL(windowActivated(QWidget *)),
  37.         SLOT(windowActivated(QWidget *)));
  38.     workspace->setBackgroundMode(PaletteMid);
  39.  
  40.     setCentralWidget(box);
  41. }
  42.  
  43.  
  44. I18nDemo::~I18nDemo()
  45. {
  46. }
  47.  
  48.  
  49. void I18nDemo::initActions()
  50. {
  51.     actionClose = new QAction(tr("Close the current window."),
  52.                   tr("Close"),
  53.                   CTRL + Key_F4,
  54.                   this);
  55.     connect(actionClose, SIGNAL(activated()), SLOT(closeSlot()));
  56.  
  57.     actionCloseAll = new QAction(tr("Close all opened windows."),
  58.                  tr("Close All"),
  59.                  0,
  60.                  this);
  61.     connect(actionCloseAll, SIGNAL(activated()), SLOT(closeAllSlot()));
  62.  
  63.     actionTile = new QAction(tr("Tile opened windows."),
  64.                  tr("Tile"),
  65.                  0,
  66.                  this);
  67.     connect(actionTile, SIGNAL(activated()), SLOT(tileSlot()));
  68.  
  69.     actionCascade = new QAction(tr("Cascade opened windows."),
  70.                 tr("Cascade"),
  71.                 0,
  72.                 this);
  73.     connect(actionCascade, SIGNAL(activated()), SLOT(cascadeSlot()));
  74. }
  75.  
  76.  
  77. void I18nDemo::initMenuBar()
  78. {
  79.     newMenu = new QPopupMenu(this);
  80.     connect(newMenu, SIGNAL(activated(int)), SLOT(newSlot(int)));
  81.  
  82.     newMenu->insertItem("&English", 0);
  83.     newMenu->insertItem("&Japanese", 1);
  84.     newMenu->insertItem("&Korean", 2);
  85.     newMenu->insertItem("&Norwegian", 3);
  86.  
  87.     windowMenu = new QPopupMenu(this);
  88.     connect(windowMenu, SIGNAL(activated(int)), SLOT(windowSlot(int)));
  89.  
  90.     windowMenu->setCheckable(TRUE);
  91.  
  92.     actionClose->addTo(windowMenu);
  93.     actionCloseAll->addTo(windowMenu);
  94.     windowMenu->insertSeparator();
  95.     actionTile->addTo(windowMenu);
  96.     actionCascade->addTo(windowMenu);
  97.     windowMenu->insertSeparator();
  98.  
  99.     menuBar()->insertItem("&New", newMenu);
  100.     menuBar()->insertItem("&Window", windowMenu);
  101. }
  102.  
  103.  
  104. void I18nDemo::newSlot(int id)
  105. {
  106.     QString qmfile;
  107.     switch (id) {
  108.     default:
  109.     case 0: qmfile = "i18n/en.qm"; break;
  110.     case 1: qmfile = "i18n/ja.qm"; break;
  111.     case 2: qmfile = "i18n/ko.qm"; break;
  112.     case 3: qmfile = "i18n/no.qm"; break;
  113.     }
  114.  
  115.     if (lastwrapper) {
  116.     qApp->removeTranslator(&lastwrapper->translator);
  117.     lastwrapper = 0;
  118.     }
  119.  
  120.     Wrapper *wrapper = new Wrapper(workspace, windowIdNumber);
  121.     wrapper->translator.load(qmfile, ".");
  122.  
  123.     qApp->installTranslator(&wrapper->translator);
  124.  
  125.     connect(wrapper, SIGNAL(destroyed()), SLOT(wrapperDead()));
  126.     wrapper->setCaption(tr("--language--"));
  127.  
  128.     TextEdit *te = new TextEdit(wrapper);
  129.     te->setMinimumSize(500, 400);
  130.     te->fileNew();
  131.     te->currentEditor()->
  132.     setText(tr("<h3>About Qt</h3>"
  133.            "<p>This program uses Qt version %1, a multiplatform C++ "
  134.            "GUI toolkit from Trolltech. Qt provides single-source "
  135.            "portability across Windows 95/98/NT/2000, Linux, Solaris, "
  136.            "HP-UX and many other versions of Unix with X11.</p>"
  137.            "<p>See <tt>http://www.trolltech.com/qt/</tt> for more "
  138.            "information.</p>").arg(QT_VERSION_STR));
  139.  
  140.     qApp->removeTranslator(&wrapper->translator);
  141.  
  142.     te->show();
  143.     wrapper->show();
  144.  
  145.     windowMenu->insertItem(wrapper->caption(), wrapper->id);
  146.     windowMenu->setItemChecked(wrapper->id, TRUE);
  147.     lastwrapper = wrapper;
  148.  
  149.     windowIdNumber++;
  150. }
  151.  
  152.  
  153. void I18nDemo::windowSlot(int id)
  154. {
  155.     if (id < 5000)
  156.     return;
  157.  
  158.     QWidgetList list = workspace->windowList();
  159.     Wrapper *wrapper = (Wrapper *) list.first();
  160.     while (wrapper) {
  161.     if (wrapper->id == id) {
  162.         wrapper->setFocus();
  163.         break;
  164.     }
  165.  
  166.     wrapper = (Wrapper *) list.next();
  167.     }
  168. }
  169.  
  170.  
  171. void I18nDemo::windowActivated(QWidget *w)
  172. {
  173.     if (lastwrapper) {
  174.     qApp->removeTranslator(&lastwrapper->translator);
  175.     windowMenu->setItemChecked(lastwrapper->id, FALSE);
  176.     }
  177.  
  178.     if (! w) {
  179.     lastwrapper = 0;
  180.     return;
  181.     }
  182.  
  183.     Wrapper *wrapper = (Wrapper *) w;
  184.     if (isVisible())
  185.     qApp->installTranslator(&wrapper->translator);
  186.  
  187.     windowMenu->setItemChecked(wrapper->id, TRUE);
  188.     lastwrapper = wrapper;
  189. }
  190.  
  191.  
  192. void I18nDemo::closeSlot()
  193. {
  194.     QWidget *w = workspace->activeWindow();
  195.     delete w;
  196. }
  197.  
  198.  
  199. void I18nDemo::closeAllSlot()
  200. {
  201.     QWidget *w;
  202.     while ((w = workspace->activeWindow()))
  203.     w->close(TRUE);
  204. }
  205.  
  206.  
  207. void I18nDemo::tileSlot()
  208. {
  209.     workspace->tile();
  210. }
  211.  
  212.  
  213. void I18nDemo::cascadeSlot()
  214. {
  215.     workspace->cascade();
  216. }
  217.  
  218.  
  219. void I18nDemo::wrapperDead()
  220. {
  221.     Wrapper *w = (Wrapper *) sender();
  222.  
  223.     if (w == lastwrapper)
  224.     qApp->removeTranslator(&w->translator);
  225.  
  226.     windowMenu->removeItem(w->id);
  227. }
  228.  
  229.  
  230. void I18nDemo::showEvent(QShowEvent *)
  231. {
  232.     if (firstShow) {
  233.     newSlot(1);
  234.     firstShow = FALSE;
  235.     return;
  236.     }
  237.  
  238.     if (! lastwrapper)
  239.     return;
  240.  
  241.     qApp->installTranslator(&lastwrapper->translator);
  242. }
  243.  
  244.  
  245. void I18nDemo::hideEvent(QHideEvent *)
  246. {
  247.     if (! lastwrapper)
  248.     return;
  249.  
  250.     qApp->removeTranslator(&lastwrapper->translator);
  251. }
  252.